Page({
  data: {
    cameraCtx: null,
    cameraReady: false,
    cameraPosition: 'back',
    flashMode: 'off',
    capturedImages: [],
    showPreview: false,
    currentPreviewIndex: 0,
    isProcessing: false
  },
  
  onLoad: function() {
    // 初始化相机上下文
    this.initCamera();
    
    // 不再主动检查相机权限，让系统自动处理
    // 相机组件会自动请求权限，避免重复请求
  },
  
  onShow: function() {
    if (this.data.cameraCtx) {
      // 恢复相机
      try {
        this.data.cameraCtx.resumePreview();
      } catch (error) {
        console.error('恢复相机预览失败:', error);
      }
    }
  },
  
  onHide: function() {
    if (this.data.cameraCtx) {
      // 暂停相机预览以节省资源
      try {
        this.data.cameraCtx.pausePreview();
      } catch (error) {
        console.error('暂停相机预览失败:', error);
      }
    }
  },
  
  // 检查相机权限 - 仅在需要时调用，不在onLoad中自动调用
  checkCameraPermission: function() {
    wx.getSetting({
      success: res => {
        if (!res.authSetting['scope.camera']) {
          // 只在用户明确拒绝后才显示引导
          wx.showModal({
            title: '提示',
            content: '需要您授权使用相机功能',
            confirmText: '去授权',
            success: (res) => {
              if (res.confirm) {
                wx.openSetting();
              }
            }
          });
        }
      }
    });
  },
  
  // 初始化相机
  initCamera: function() {
    try {
      console.log('初始化相机...');
      const cameraCtx = wx.createCameraContext();
      
      if (!cameraCtx) {
        console.error('创建相机上下文失败');
        wx.showToast({
          title: '相机初始化失败',
          icon: 'none'
        });
        return;
      }
      
      console.log('相机上下文创建成功');
      this.setData({
        cameraCtx: cameraCtx
      });
    } catch (error) {
      console.error('初始化相机出错:', error);
      wx.showToast({
        title: '相机初始化出错',
        icon: 'none'
      });
    }
  },
  
  // 相机准备就绪
  onCameraReady: function() {
    console.log('相机准备就绪');
    this.setData({
      cameraReady: true
    });
  },
  
  // 相机错误处理
  onCameraError: function(e) {
    console.error('相机错误:', e.detail);
    wx.showToast({
      title: '相机启动失败: ' + e.detail.errMsg,
      icon: 'none'
    });
  },
  
  // 拍照
  takePhoto: function() {
    if (this.data.isProcessing) {
      wx.showToast({
        title: '正在处理中，请稍候',
        icon: 'none'
      });
      return;
    }
    
    // 即使相机未准备好，也尝试拍照
    this.setData({
      isProcessing: true
    });
    
    try {
      console.log('开始拍照...');
      
      // 获取相机组件
      const cameraContext = wx.createCameraContext();
      
      cameraContext.takePhoto({
        quality: 'high',
        success: (res) => {
          console.log('拍照成功:', res.tempImagePath);
          // 处理拍摄的图片
          this.processImage(res.tempImagePath);
        },
        fail: (err) => {
          console.error('拍照失败:', err);
          
          // 如果拍照失败，尝试从相册选择图片
          wx.showModal({
            title: '拍照失败',
            content: '是否从相册选择图片？',
            success: (res) => {
              if (res.confirm) {
                this.chooseFromAlbum();
              }
            },
            complete: () => {
              this.setData({
                isProcessing: false
              });
            }
          });
        }
      });
    } catch (error) {
      console.error('拍照过程出错:', error);
      wx.showToast({
        title: '拍照出错，请尝试从相册选择',
        icon: 'none',
        duration: 2000
      });
      this.setData({
        isProcessing: false
      });
    }
  },
  
  // 处理拍摄的图片（保持原图）
  processImage: function(imagePath) {
    console.log('处理图片:', imagePath);
    
    if (!imagePath || typeof imagePath !== 'string') {
      console.error('无效的图片路径:', imagePath);
      wx.showToast({
        title: '无效的图片路径',
        icon: 'none'
      });
      this.setData({
        isProcessing: false
      });
      return;
    }
    
    wx.showLoading({
      title: '正在处理图片...',
    });
    
    // 直接使用原图，不进行任何处理
    setTimeout(() => {
      console.log('图片处理成功(保持原图):', imagePath);
      wx.hideLoading();
      
      // 添加到已拍摄图片列表
      const capturedImages = this.data.capturedImages;
      capturedImages.push(imagePath);
      
      this.setData({
        capturedImages: capturedImages,
        isProcessing: false
      });
      
      // 添加到全局数据
      if (getApp().addScanImage) {
        getApp().addScanImage(imagePath);
      } else {
        console.warn('全局 addScanImage 方法不存在');
      }
      
      // 显示提示
      wx.showToast({
        title: `已拍摄 ${capturedImages.length} 页`,
        icon: 'success'
      });
    }, 500);
  },
  
  // 从相册选择图片
  chooseFromAlbum: function() {
    wx.chooseImage({
      count: 9,
      sizeType: ['original'],
      sourceType: ['album'],
      success: (res) => {
        console.log('从相册选择图片成功:', res.tempFilePaths);
        
        // 处理选择的图片
        res.tempFilePaths.forEach(path => {
          this.processImage(path);
        });
      },
      fail: (err) => {
        console.error('从相册选择图片失败:', err);
        wx.showToast({
          title: '选择图片失败',
          icon: 'none'
        });
      }
    });
  },
  
  // 切换闪光灯
  toggleFlash: function() {
    const newMode = this.data.flashMode === 'off' ? 'on' : 'off';
    console.log('切换闪光灯:', newMode);
    this.setData({
      flashMode: newMode
    });
  },
  
  // 切换相机前后置
  switchCamera: function() {
    const newPosition = this.data.cameraPosition === 'back' ? 'front' : 'back';
    console.log('切换相机:', newPosition);
    this.setData({
      cameraPosition: newPosition
    });
  },
  
  // 预览已拍摄的图片
  previewImages: function() {
    if (this.data.capturedImages.length === 0) {
      wx.showToast({
        title: '请先拍摄文档',
        icon: 'none'
      });
      return;
    }
    
    console.log('预览图片');
    this.setData({
      showPreview: true,
      currentPreviewIndex: 0
    });
  },
  
  // 关闭预览
  closePreview: function() {
    console.log('关闭预览');
    this.setData({
      showPreview: false
    });
  },
  
  // 删除当前预览的图片
  deleteCurrentImage: function() {
    const index = this.data.currentPreviewIndex;
    const capturedImages = this.data.capturedImages;
    
    if (index >= 0 && index < capturedImages.length) {
      console.log('删除图片:', index);
      
      // 从本地列表删除
      capturedImages.splice(index, 1);
      
      // 从全局数据删除
      getApp().removeScanImage(index);
      
      // 更新状态
      this.setData({
        capturedImages: capturedImages,
        currentPreviewIndex: Math.min(index, capturedImages.length - 1)
      });
      
      // 如果没有图片了，关闭预览
      if (capturedImages.length === 0) {
        this.closePreview();
      }
    }
  },
  
  // 切换到下一张图片
  nextImage: function() {
    const currentIndex = this.data.currentPreviewIndex;
    const maxIndex = this.data.capturedImages.length - 1;
    
    if (currentIndex < maxIndex) {
      this.setData({
        currentPreviewIndex: currentIndex + 1
      });
    }
  },
  
  // 切换到上一张图片
  prevImage: function() {
    const currentIndex = this.data.currentPreviewIndex;
    
    if (currentIndex > 0) {
      this.setData({
        currentPreviewIndex: currentIndex - 1
      });
    }
  },
  
  // 完成扫描，进入预览页面
  finishScan: function() {
    if (this.data.capturedImages.length === 0) {
      wx.showToast({
        title: '请先拍摄文档',
        icon: 'none'
      });
      return;
    }
    
    console.log('完成扫描，进入预览页面');
    wx.navigateTo({
      url: '/pages/preview/preview'
    });
  },
  
  // 滑动切换图片
  swiperChange: function(e) {
    this.setData({
      currentPreviewIndex: e.detail.current
    });
  }
})